﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WareHouse.App
{
    using System.Drawing.Printing;
    using System.Runtime.InteropServices;

    using DevExpress.XtraGrid;
    using DevExpress.XtraPrinting;

    using WareHouse.Contract.Models;
    using WareHouse.Contract.Services;
    using WareHouse.Service.Services;

    public partial class FrmMain : Form
    {
        private IWareHouseService wareHouseService;

        private List<ExportDetailModel> listExportDetailModels;

        public FrmMain()
        {
            wareHouseService = new WareHouseService();
            listExportDetailModels = new List<ExportDetailModel>();
            InitializeComponent();
            dtgDetailItems.AutoGenerateColumns = false;
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            CheckRole();
            this.LoadDataForFormMain();
        }
        private void CheckRole()
        {
            if (!wareHouseService.R(General.groupUserId, "export_new"))
            {
                btnCreateExport.Enabled = false;

            }
            if (!wareHouseService.R(General.groupUserId, "exporthistory_read"))
            {
                btnPrintAgain.Enabled = false;

            }
            

        }
        private void printLink_CreateReportHeaderArea(object sender, DevExpress.XtraPrinting.CreateAreaEventArgs e)
        {
            // draw title
            DevExpress.XtraPrinting.TextBrick brickTitle;

            brickTitle = e.Graph.DrawString("PHIẾU XUẤT KHO", Color.Black, new RectangleF(0, 0, 725, 40), DevExpress.XtraPrinting.BorderSide.None);

            brickTitle.Font = new Font("Tahoma", 22);

            brickTitle.StringFormat = new DevExpress.XtraPrinting.BrickStringFormat(StringAlignment.Center);




            // draw column left


            DevExpress.XtraPrinting.TextBrick brickleft1;

            brickleft1 = e.Graph.DrawString(
                  "Mã KH:   "
                + lblCustomerId.Text
                + Environment.NewLine + Environment.NewLine
                + "Số HD:   " + lblExportId.Text
                + Environment.NewLine + Environment.NewLine, Color.Black, new RectangleF(0, 50, 200, 60), DevExpress.XtraPrinting.BorderSide.None);

            brickleft1.Font = new Font("Tahoma", 10);

            brickleft1.StringFormat = new BrickStringFormat(StringAlignment.Near);


            // draw column mid


            DevExpress.XtraPrinting.TextBrick brickleft2;

            brickleft2 = e.Graph.DrawString(
                  "Tên KH:   "
                + lblCustomerName.Text
                + Environment.NewLine + Environment.NewLine
                + "Kho xuất: " + lblWareHouseName.Text
                + Environment.NewLine + Environment.NewLine, Color.Black, new RectangleF(205, 50, 250, 60), DevExpress.XtraPrinting.BorderSide.None);

            brickleft2.Font = new Font("Tahoma", 10);

            brickleft2.StringFormat = new BrickStringFormat(StringAlignment.Near);

            // draw column right


            DevExpress.XtraPrinting.TextBrick brickleft3;

            brickleft3 = e.Graph.DrawString(
                  "NV lập HD:     "
                + lblEmployerName.Text
                + Environment.NewLine + Environment.NewLine
                + "Ngày lập HD:  " + lblDate.Text
                + Environment.NewLine + Environment.NewLine, Color.Black, new RectangleF(460, 50, 280, 60), DevExpress.XtraPrinting.BorderSide.None);

            brickleft3.Font = new Font("Tahoma", 10);

            brickleft3.StringFormat = new BrickStringFormat(StringAlignment.Near);

            // draw title detail
            DevExpress.XtraPrinting.TextBrick brickTitleDetail;

            brickTitleDetail = e.Graph.DrawString("Chi Tiết Hóa Đơn", Color.Black, new RectangleF(0, 115, 725, 20), DevExpress.XtraPrinting.BorderSide.None);

            brickTitleDetail.Font = new Font("Tahoma", 12, FontStyle.Bold);

            brickTitleDetail.StringFormat = new DevExpress.XtraPrinting.BrickStringFormat(StringAlignment.Center);




        }
        private void PrintListItemInGrid(GridControl gridControl)
        {
            PrintableComponentLink printLink = new PrintableComponentLink();
            printLink.CreateReportHeaderArea += this.printLink_CreateReportHeaderArea;

            PrintingSystem printingSystem = new PrintingSystem();
            printingSystem.Links.AddRange(new object[] { printLink });

            printLink.PaperKind = PaperKind.A4;
            printLink.Component = gridControl;

            printLink.Images.Add(Properties.Resources.Logo);

            printLink.Margins.Top = 200;
            printLink.Margins.Left = 25;
            printLink.Margins.Right = 25;


            var agencyName = "";
            var agencyAddress = "";
            var agencyPhone = "";



            var currentAgency = wareHouseService.GetCurrentAgency();
            if (currentAgency == null)
            {
                MessageBox.Show("Hiện tại chưa có đại lý nào được chọn");
                return;
            }

            agencyAddress = currentAgency.AgencyAddress;
            agencyName = currentAgency.AgencyName;
            agencyPhone = currentAgency.Phone;
            #region Define content of header
            PageHeaderArea pgHArea = new PageHeaderArea();

            pgHArea.Font = new Font(new FontFamily("Tahoma"), 12, FontStyle.Regular);

            pgHArea.Content.AddRange(
                new string[]
                    {
                        "Đại lý : "+ agencyName+ Environment.NewLine 
                        + "Địa chỉ : "+agencyAddress + Environment.NewLine
                        + "Điện thoại : "+agencyPhone + Environment.NewLine + "  " + Environment.NewLine
                        + Environment.NewLine + "" + Environment.NewLine + ""
                        + Environment.NewLine, Environment.NewLine + Environment.NewLine + "", "[Image 0]"
                    });

            #endregion
            #region Define content of footer
            PageFooterArea pgFArea = new PageFooterArea();

            pgFArea.Font = new Font(new FontFamily("Tahoma"), 10, FontStyle.Bold);

            decimal totalSummary = 0;
            var summaryValue = this.gridView2.Columns["Total"].SummaryItem.SummaryValue;
            if (summaryValue != null && decimal.TryParse(summaryValue.ToString(), out totalSummary))
            {
                pgFArea.Content.AddRange(
                new string[]
                    {"","",
                        "Thành tiền : "+ String.Format("{0:N0}",totalSummary)+" VND"+Environment.NewLine
                    +"Bằng chữ :"+ General.DetachMoney((double)totalSummary)
                      
                  
                    });

            }

            #endregion

            // Create a PageHeaderFooter object for this link.
            printingSystem.Links[0].PageHeaderFooter = new PageHeaderFooter(pgHArea, pgFArea);


            printLink.ShowPreview();
        }

        private void LoadDataForFormMain()
        {
            this.RefreshLabel();
            this.LoadWareHouseSale();
            this.LoadCustomer();
        }

        private void LoadWareHouseSale()
        {
            ddlWareHouseSale.DataSource = wareHouseService.LoadWareHouseSales();
            ddlWareHouseSale.DisplayMember = "WareHouseName";
            ddlWareHouseSale.ValueMember = "WareHouseId";
        }

        private void LoadCustomer()
        {
            ddlCustomer.DataSource = wareHouseService.ListCustomer();
            ddlCustomer.ValueMember = "CustomerId";
            ddlCustomer.DisplayMember = "FullName";

        }

        private void LoadItemByWareHouseId(int wareHouseId)
        {
           wareHouseService=new WareHouseService();
             var listResult = wareHouseService.ListItemByWareHouseId(wareHouseId).ToArray();
            ddlItem.Properties.DataSource = listResult;
            ddlItem.Properties.DisplayMember = "ItemName";
            ddlItem.Properties.ValueMember = "ItemId";
            ddlItem.Refresh();
        }

        private void ddlWareHouseSale_SelectedIndexChanged(object sender, EventArgs e)
        {
            var obj = ddlWareHouseSale.SelectedItem as WareHouseModel;
            this.LoadItemByWareHouseId(obj.WareHouseId);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(
                "Bạn có chắc là muốn làm lại", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                == DialogResult.Yes)
            {
                this.btnCreateExport.Text = "Lập đơn hàng";
                this.RefreshLabel();
                ddlItem.Enabled = false;
                txtQantity.Enabled = false;
                lblTotal.Text = "";
                ddlCustomer.Enabled = true;
                ddlWareHouseSale.Enabled = true;
                this.listExportDetailModels.Clear();
                this.dtgDetailItems.DataSource = this.listExportDetailModels.ToArray();
            }

        }

        private void AddItemToGridDetail()
        {
            if (rdbPast.Checked)
            {
                if (this.dtpDateCreate.Text == "" || dtpDateCreate.EditValue == null)
                {
                    MessageBox.Show("Bạn phải chọn ngày lập hóa đơn");
                    return;
                }
                if (DateTime.Parse(dtpDateCreate.EditValue.ToString()) >= DateTime.Now)
                {
                    MessageBox.Show("Chỉ lập hóa đơn cho những ngày trong quá khứ");
                    return;
                }
                if (this.ddlItem.Text == "")
                {
                    MessageBox.Show("Bạn phải chọn mặt hàng để bán");
                    this.ddlItem.ShowPopup();
                    return;
                }
                if (this.txtQantity.Text == "" || int.Parse(this.txtQantity.Text) <= 0)
                {
                    MessageBox.Show("Bạn phải nhập số lượng cần bán");
                    this.txtQantity.Focus();
                    this.txtQantity.SelectAll();
                    return;
                }

                var item =
                    (ItemModel)
                    this.ddlItem.Properties.View.GetRow(
                        this.ddlItem.Properties.GetIndexByKeyValue(this.ddlItem.EditValue));
                // get price at date selected

                var priceFollowDate = wareHouseService.GetPriceInPast(
                    DateTime.Parse(dtpDateCreate.EditValue.ToString()), item.ItemId);


                if (int.Parse(txtQantity.Text) > item.Quantity)
                {
                    MessageBox.Show("Số lượng hàng trong kho không đủ bán. Vui lòng kiểm tra lại");
                    return;
                }

                if (priceFollowDate == null)
                {
                    MessageBox.Show(
                        "Chưa có giá nào cho sản phẩm này trong khoảng thời gian này. Vui lòng kiểm tra lại");
                    return;
                }

                var exportDetail = new ExportDetailModel();
                exportDetail.ExportId = this.lblExportId.Text;
                exportDetail.ItemId = item.ItemId;
                exportDetail.ItemPriceId = priceFollowDate.ItemPriceId;
                exportDetail.Quantity = int.Parse(this.txtQantity.Text);
                exportDetail.ItemName = item.ItemName;
                exportDetail.CurrentPrice = (float)priceFollowDate.Value;
                exportDetail.Total = exportDetail.Quantity * exportDetail.CurrentPrice;
                exportDetail.WareHouseId = int.Parse(ddlWareHouseSale.SelectedValue.ToString());
                exportDetail.QuantityBegining = item.Quantity;
                // add to list

                // check exist in datagrid if exist only update 

                var isExists = this.listExportDetailModels.Any(x => x.ItemId == exportDetail.ItemId);

                if (isExists)
                {
                    MessageBox.Show("Sản phẩm này đã có");
                    return;
                }

                this.listExportDetailModels.Add(exportDetail);
                this.dtgDetailItems.DataSource = this.listExportDetailModels.ToArray();
                this.gridItems.DataSource = this.listExportDetailModels.ToArray();

                CanculateTotal();
                ReCanculateSTT();
                ddlItem.ShowPopup();
            }




            if (rdbCurrent.Checked)
            {
                if (this.ddlItem.Text == "")
                {
                    MessageBox.Show("Bạn phải chọn mặt hàng để bán");
                    this.ddlItem.ShowPopup();
                    return;
                }
                if (this.txtQantity.Text == "" || int.Parse(this.txtQantity.Text) <= 0)
                {
                    MessageBox.Show("Bạn phải nhập số lượng cần bán");
                    this.txtQantity.Focus();
                    this.txtQantity.SelectAll();
                    return;
                }

                var item =
                    (ItemModel)
                    this.ddlItem.Properties.View.GetRow(
                        this.ddlItem.Properties.GetIndexByKeyValue(this.ddlItem.EditValue));

                if (int.Parse(txtQantity.Text) > item.Quantity)
                {
                    MessageBox.Show("Số lượng hàng trong kho không đủ bán. Vui lòng kiểm tra lại");
                    return;
                }

                if (item.CurrentPrice <= 0)
                {
                    MessageBox.Show(
                        "Sản phẩm này chưa có giá vui lòng chọn sản phẩm khác hoặc thêm giá cho sản phẩm này trước khi bán");
                    return;
                }

                var exportDetail = new ExportDetailModel();
                exportDetail.ExportId = this.lblExportId.Text;
                exportDetail.ItemId = item.ItemId;
                exportDetail.ItemPriceId = item.ItemPriceId;
                exportDetail.Quantity = int.Parse(this.txtQantity.Text);
                exportDetail.ItemName = item.ItemName;
                exportDetail.CurrentPrice = (float)item.CurrentPrice;
                exportDetail.Total = exportDetail.Quantity * exportDetail.CurrentPrice;
                exportDetail.WareHouseId = int.Parse(ddlWareHouseSale.SelectedValue.ToString());
                exportDetail.QuantityBegining = item.Quantity;
                // add to list

                // check exist in datagrid if exist only update 

                var isExists = this.listExportDetailModels.Any(x => x.ItemId == exportDetail.ItemId);

                if (isExists)
                {
                    MessageBox.Show("Sản phẩm này đã có");

                    return;
                }

                this.listExportDetailModels.Add(exportDetail);

                this.RefreshGridItemDetail();
                CanculateTotal();
                ReCanculateSTTForDevExpressGridControl();
                ddlItem.ShowPopup();
            }
        }

        private void RefreshGridItemDetail()
        {
            this.dtgDetailItems.DataSource = this.listExportDetailModels.ToArray();
            gridItems.DataSource = this.listExportDetailModels.ToArray();
            this.ReCanculateSTT();
        }

        private void ddlItem_Closed(object sender, DevExpress.XtraEditors.Controls.ClosedEventArgs e)
        {
            txtQantity.Focus();
        }

        private void rdbCurrent_CheckedChanged(object sender, EventArgs e)
        {
            ShowHideDateTimePicker();
        }

        private void rdbPast_CheckedChanged(object sender, EventArgs e)
        {
            ShowHideDateTimePicker();
        }

        private void ShowHideDateTimePicker()
        {
            if (rdbCurrent.Checked)
            {
                lblDateCreate.Visible = false;
                dtpDateCreate.Visible = false;
                return;
            }
            lblDateCreate.Visible = true;
            dtpDateCreate.Visible = true;
        }

        private void btnCreateExport_Click(object sender, EventArgs e)
        {
            if (btnCreateExport.Text == "Lập đơn hàng")
            {
                if (this.ValidateExport())
                {
                    lblExportId.Text = wareHouseService.GetExport();
                    lblCustomerId.Text = ddlCustomer.SelectedValue.ToString();
                    lblCustomerName.Text = ddlCustomer.Text;
                    lblDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
                    lblWareHouseName.Text = ddlWareHouseSale.Text;
                    lblEmployerName.Text = General.UserFullName;

                    ddlItem.Enabled = true;
                    txtQantity.Enabled = true;
                    ddlWareHouseSale.Enabled = false;
                    ddlCustomer.Enabled = false;
                    btnCreateExport.Text = "Lưu";
                }

                return;
            }

            if (btnCreateExport.Text == "Lưu")
            {
                if (this.ValidateExport())
                {
                    if (dtgDetailItems.Rows.Count <= 0)
                    {
                        MessageBox.Show("Chưa có mặt hàng nào để bán");
                        return;
                    }
                    if (this.ValidateExport())
                    {
                        if (MessageBox.Show("Bạn có muốn in hóa đơn này sau khi lưu ?","Thông báo", MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
                        {
                            this.SaveExportAndExportDetail();
                            this.PrintListItemInGrid(gridItems);
                            this.RefreshLabel();
                            return;
                        }
                        this.SaveExportAndExportDetail();
                        this.RefreshLabel();
                       
                    }
                }

            }
        }

        private void SaveExportAndExportDetail()
        {
            var exportModel = new ExportModel();
            exportModel.ExportId = this.lblExportId.Text;
            exportModel.CustomerId = int.Parse(this.lblCustomerId.Text);
            if (this.chkPayDirecly.Checked)
            {
                exportModel.IsDebt = false;
                exportModel.IsPayDirect = true;
            }
            else
            {
                exportModel.IsDebt = true;
                exportModel.IsPayDirect = false;
            }
            // date create
            if (this.rdbCurrent.Checked)
            {
                exportModel.DateCreate = DateTime.Now;
            }
            else
            {
                exportModel.DateCreate = DateTime.Parse(this.dtpDateCreate.EditValue.ToString());
            }
            exportModel.WareHouseId = int.Parse(this.ddlWareHouseSale.SelectedValue.ToString());
            exportModel.UserCreate = General.userName;
            exportModel.LastUpdate = DateTime.Now;
            exportModel.UpdateBy = General.userName;

            if (this.wareHouseService.SaveExport(exportModel))
            {
                if (this.wareHouseService.SaveExportDetail(this.listExportDetailModels, exportModel))
                {
                    MessageBox.Show("Lưu thành công");
                    this.listExportDetailModels = new List<ExportDetailModel>();
                    this.ddlItem.Enabled = false;
                    this.txtQantity.Enabled = false;
                    this.ddlWareHouseSale.Enabled = true;
                    this.ddlCustomer.Enabled = true;
                    this.dtgDetailItems.DataSource = this.listExportDetailModels;
                    this.btnCreateExport.Text = "Lập đơn hàng";
                    this.lblTotal.Text = "";
                    this.LoadWareHouseSale();
                   
                    return;
                }
                else
                {
                    MessageBox.Show("Có vấn đề xảy ra khi lưu dữ liệu. Xin vui lòng thử lại");
                    return;
                }
            }
            MessageBox.Show("Có vấn đề xảy ra khi lưu dữ liệu. Xin vui lòng thử lại");
        }

        private bool ValidateExport()
        {
            for (int i = 0; i < dtgDetailItems.Rows.Count; i++)
            {
                var newQuantity = int.Parse(dtgDetailItems.Rows[i].Cells["Quantity"].Value.ToString());

                if (newQuantity <= 0)
                {
                    return false;
                }

            }


            // export for current
            if (rdbCurrent.Checked)
            {
                if (ddlCustomer.SelectedIndex < 0)
                {
                    MessageBox.Show("Bạn chưa chọn khách hàng để bán");
                    return false;
                }
                if (ddlWareHouseSale.SelectedIndex < 0)
                {
                    MessageBox.Show("Chọn kho xuất hàng");
                    return false;
                }


                return true;
            }

            // export for past
            if (dtpDateCreate.EditValue == null || dtpDateCreate.Text == "")
            {
                MessageBox.Show("Chọn ngày lập hóa đơn");
                return false;
            }

            if (ddlCustomer.SelectedIndex < 0)
            {
                MessageBox.Show("Bạn chưa chọn khách hàng để bán");
                return false;
            }
            if (ddlWareHouseSale.SelectedIndex < 0)
            {
                MessageBox.Show("Chọn kho xuất hàng");
                return false;
            }

            if (DateTime.Parse(dtpDateCreate.EditValue.ToString()).Date >= DateTime.Now.Date)
            {
                MessageBox.Show("Chỉ được chọn ngày trong quá khứ");
                return false;
            }


            return true;

        }

        private void RefreshLabel()
        {
            lblCustomerName.Text = "";
            lblDate.Text = "";
            lblEmployerName.Text = "";
            lblExportId.Text = "";
            lblWareHouseName.Text = "";
            lblCustomerId.Text = "";
        }

        private void dtgDetailItems_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                var itemId = int.Parse(dtgDetailItems.Rows[e.RowIndex].Cells["ItemId1"].Value.ToString());
                var newQuantity = int.Parse(dtgDetailItems.Rows[e.RowIndex].Cells["Quantity"].Value.ToString());
                if (itemId > 0)
                {
                    foreach (var item in listExportDetailModels)
                    {
                        if (item.ItemId == itemId)
                        {
                            if (newQuantity == 0)
                            {
                                MessageBox.Show("Số lượng và Đơn giá phải lớn hơn 0");
                                this.RefreshGridItemDetail();
                                return;
                            }
                            var newTotal = item.CurrentPrice * newQuantity;
                            item.Total = newTotal;
                            item.Quantity = newQuantity;
                            dtgDetailItems.Refresh();
                            CanculateTotal();
                            return;
                        }
                    }
                }
            }
            catch (Exception)
            {


            }

        }

        private void txtQantity_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }

            if ((Keys)e.KeyChar == Keys.Enter)
            {
                this.AddItemToGridDetail();
            }

        }

        private void ReCanculateSTT()
        {
            for (int i = 0; i < dtgDetailItems.Rows.Count; i++)
            {
                dtgDetailItems.Rows[i].Cells["STT"].Value = i + 1;
            }

        }


        private void ReCanculateSTTForDevExpressGridControl()
        {
            for (int i = 0; i < gridView2.RowCount; i++)
            {
                gridView2.SetRowCellValue(i, "Stt", i + 1);
            }

        }

        private void dtgDetailItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.KeyPress -= new KeyPressEventHandler(ColumnQuantity_KeyPress);
            if (dtgDetailItems.CurrentCell.ColumnIndex == 5) //Desired Column
            {
                TextBox tb = e.Control as TextBox;
                if (tb != null)
                {
                    tb.KeyPress += new KeyPressEventHandler(ColumnQuantity_KeyPress);
                }
            }
        }

        private void ColumnQuantity_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void CanculateTotal()
        {
            double total = 0;
            if (listExportDetailModels.Count > 0)
            {
                foreach (var item in listExportDetailModels)
                {
                    total = total + item.Total;
                }
                lblTotal.Text = string.Format("{0:N0}", total);
            }
        }

        private void dtgDetailItems_KeyDown(object sender, KeyEventArgs e)
        {


            if ((Keys)e.KeyCode == Keys.Delete)
            {
                foreach (DataGridViewRow item in this.dtgDetailItems.Rows)
                {
                    var itemId = int.Parse(item.Cells["ItemId1"].Value.ToString());

                    listExportDetailModels.RemoveAll(x => x.ItemId == itemId);
                    break;

                }
                this.RefreshGridItemDetail();

            }
        }

        private void danhToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "agency_read"))
            {
                if (Application.OpenForms["FrmAgency"] == null)
                {
                    FrmAgency area = new FrmAgency();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmAgency"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void thiếtLậpCôngNợChoKháchHàngToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "customerdebtrate_read"))
            {
                if (Application.OpenForms["FrmCustomerDebtRate"] == null)
                {
                    FrmCustomerDebtRate area = new FrmCustomerDebtRate();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmCustomerDebtRate"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");
        }

        private void quảnLýKháchHàngToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "customer_read"))
            {
                if (Application.OpenForms["FrmCustomer"] == null)
                {
                    FrmCustomer area = new FrmCustomer();
                    area.ShowDialog();
                    this.LoadDataForFormMain();
                    return;

                }
                Application.OpenForms["FrmCustomer"].ShowDialog();
                this.LoadDataForFormMain();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");
           
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "itemtype_read"))
            {
                if (Application.OpenForms["FrmItemType"] == null)
                {
                    FrmItemType area = new FrmItemType();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmItemType"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");


           
        }

        private void càiĐặtGiáChoSảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "itemprice_read"))
            {
                if (Application.OpenForms["FrmItemPrice"] == null)
                {
                    FrmItemPrice area = new FrmItemPrice();
                    area.ShowDialog();
                    try
                    {
                        LoadItemByWareHouseId(int.Parse(ddlWareHouseSale.SelectedValue.ToString()));

                    }
                    catch (Exception)
                    {


                    }
                    return;

                }
                Application.OpenForms["FrmItemPrice"].ShowDialog();

                try
                {
                    LoadItemByWareHouseId(int.Parse(ddlWareHouseSale.SelectedValue.ToString()));

                }
                catch (Exception)
                {


                }
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");
           
        }

        private void quảnLýSảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "item_read"))
            {
                if (Application.OpenForms["FrmItem"] == null)
                {
                    FrmItem area = new FrmItem();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmItem"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");


            
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "warehousetype_read"))
            {

                if (Application.OpenForms["FrmWareHouseType"] == null)
                {
                    FrmWareHouseType area = new FrmWareHouseType();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmWareHouseType"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void nhậpKhoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "import_read"))
            {

                if (Application.OpenForms["FrmImport"] == null)
                {
                    FrmImport area = new FrmImport();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmImport"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void chỉnhSữaHDNhậpKhoToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "importhistory_read"))
            {

                if (Application.OpenForms["FrmManageImportHistory"] == null)
                {
                    FrmManageImportHistory area = new FrmManageImportHistory();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmManageImportHistory"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void kiểmTraTồnKhoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "warehouse_viewdetail"))
            {


                if (Application.OpenForms["FrmWareHouseDetail"] == null)
                {
                    FrmWareHouseDetail area = new FrmWareHouseDetail();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmWareHouseDetail"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void phòngBanToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "department_read"))
            {

                if (Application.OpenForms["FrmDepartment"] == null)
                {
                    FrmDepartment area = new FrmDepartment();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmDepartment"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void toolStripMenuItem5_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "emp_read"))
            {

                if (Application.OpenForms["FrmEmployer"] == null)
                {
                    FrmEmployer area = new FrmEmployer();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmEmployer"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void đơnVịTínhToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "unit_read"))
            {

                if (Application.OpenForms["FrmEmployer"] == null)
                {
                    FrmUnit area = new FrmUnit();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmUnit"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void thốngKêCôngNợKHToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Những chức năng này sẽ Demo sau khi các chức năng hiện tại được khách hàng kiêm tra và xác nhận chạy ổn định");
        }

        private void báoCáoTồnKhoCuốiNgàyToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "report_existendofday"))
            {

                if (Application.OpenForms["FrmReport"] == null)
                {
                    FrmReport area = new FrmReport();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmReport"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void quảnLýTàiKhoảnNgườiDùngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "user_read"))
            {

                if (Application.OpenForms["FrmUserAccount"] == null)
                {
                    FrmUserAccount area = new FrmUserAccount();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmUserAccount"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void phânQuyềnChoNgườiDùngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "permission"))
            {

                if (Application.OpenForms["FrmPermit"] == null)
                {
                    FrmPermit area = new FrmPermit();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmPermit"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void chỉnhSữaHDXuấtKhoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "exporthistory_read"))
            {


                if (Application.OpenForms["FrmManageExportHistory"] == null)
                {
                    FrmManageExportHistory area = new FrmManageExportHistory();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmManageExportHistory"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void quảnLýKhoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "warehouse_read"))
            {

                if (Application.OpenForms["FrmWareHouse"] == null)
                {
                    FrmWareHouse area = new FrmWareHouse();
                    area.ShowDialog();
                    this.LoadDataForFormMain();
                    return;

                }
                Application.OpenForms["FrmWareHouse"].ShowDialog();
                this.LoadDataForFormMain();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void đăngXuấtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Application.OpenForms["FrmLogin"] == null)
            {
                FrmLogin area = new FrmLogin();
                area.Show();
                return;

            }
            Application.OpenForms["FrmLogin"].Show();

            this.Close();
        }

        private void thoátToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void quảnLýCôngNợToolStripMenuItem_Click(object sender, EventArgs e)
        {

            if (wareHouseService.R(General.groupUserId, "managedebt_read"))
            {
                if (Application.OpenForms["FrmManageCustomerDebt"] == null)
                {
                    FrmManageCustomerDebt area = new FrmManageCustomerDebt();
                    area.Show();
                    return;

                }
                Application.OpenForms["FrmManageCustomerDebt"].Show();

                this.Close();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void btnPrintAgain_Click(object sender, EventArgs e)
        {
            if (Application.OpenForms["FrmManageExportHistory"] == null)
            {
                FrmManageExportHistory area = new FrmManageExportHistory();
                area.ShowDialog();
                return;

            }
            Application.OpenForms["FrmManageExportHistory"].ShowDialog();
        }

        private void đổiMậtKhẩuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "change_pass"))
            {

                if (Application.OpenForms["FrmChangePassword"] == null)
                {
                    FrmChangePassword area = new FrmChangePassword();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmChangePassword"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");

        }

        private void quảnLýNhómTàiKhoảnNgườiDùngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "groupuser_read"))
            {
                if (Application.OpenForms["FrmGroupUser"] == null)
                {
                    FrmGroupUser area = new FrmGroupUser();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmGroupUser"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");
           
        }

        private void đặtHàngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "order_read"))
            {
                if (Application.OpenForms["FrmOrder"] == null)
                {
                    FrmOrder area = new FrmOrder();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmOrder"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");
        }

        private void đốiTácToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (wareHouseService.R(General.groupUserId, "company_read"))
            {
                if (Application.OpenForms["FrmCompany"] == null)
                {
                    FrmCompany area = new FrmCompany();
                    area.ShowDialog();
                    return;

                }
                Application.OpenForms["FrmCompany"].ShowDialog();
                return;
            }
            MessageBox.Show("Bạn không có quyền truy cập chức năng này");
        }

      
    }
}

